// 枚举问题
#include <stdio.h>
#include <string.h>

/// @brief 给定集合str，枚举打印出其中所有的三元组组合
/// @param str 字符集合
void getRange(char str[])
{
	// 三层for循环即可
	// 遍历下标，长度
	int i, j, k, length = strlen(str);
	// 存放三个字符
	char a, b, c;
	for (i = 0; i < length; i++)
	{
		a = str[i];
		for (j = 0; j < length; j++)
		{
			// 前面两个不能相同
			if (i == j)
			{
				continue;
			}
			b = str[j];
			for (k = 0; k < length; k++)
			{
				// 三个元素不能相同
				if (k != j && k != i)
				{
					c = str[k];
					printf("%c%c%c\n", a, b, c);
				}
			}
		}
	}
}

/// @brief 有一长阶梯，若每次跨2阶则最后剩1阶，每次跨3阶最后剩2阶，每次跨5阶最后剩4阶，每次跨6阶最后剩5阶，每次跨7阶则最后正好跨完，求1-n内阶梯总数为多少可以满足条件
/// @param n 最大阶数
void floorEnum(int n)
{
	// 遍历下标，满足条件的总数
	int i, sum = 0;
	for (i = 1; i <= n; i++)
	{
		if (i % 2 == 1 && i % 3 == 2 && i % 5 == 4 && i % 6 == 5 && i % 7 == 0)
		{
			printf("阶数为%d时符合要求！\n", i);
			sum++;
		}
	}
	printf("从1到%d内有%d个答案符合要求。", n, sum);
}

/// @brief 一只公鸡5元，一只母鸡3元，三只小鸡1元，现用100元买100只鸡，请问三种鸡各可以买多少？列出全部组合（这个问题和零钱组合问题一样）
void buyChicken()
{
	// 遍历下标，也是分别表示公鸡、母鸡和小鸡的购买个数
	int i, j, k;
	// 极端情况：只买一种鸡的100只，可以作为for结束条件
	for (i = 0; i <= 100; i++)
	{
		for (j = 0; j <= 100; j++)
		{
			for (k = 0; k <= 100; k++)
			{
				// 注意要满足k可以被3整除
				if (5 * i + 3 * j + k / 3 == 100 && k % 3 == 0 && i + j + k == 100)
				{
					printf("可以买公鸡%d只，母鸡%d只，小鸡%d只\n", i, j, k);
				}
			}
		}
	}
}

/// @brief 有两组乒乓球队进行比赛，一组为abc，一组为xyz，已知a不和x比，c不和xy比，请列出全部对手组合
void competitor()
{
	// 遍历下标，分别表示两组的人
	char i, j;
	for (i = 'a'; i <= 'c'; i++)
	{
		for (j = 'x'; j <= 'z'; j++)
		{
			// 排除条件
			if ((i == 'a' && j == 'x') || (i == 'c' && (j == 'x' || j == 'y')))
			{
				continue;
			}
			printf("%c -> %c\n", i, j);
		}
	}
}

int main()
{
	competitor();
	return 0;
}